Github の CodeDeploy インテグレーションサービスで自動デプロイする
こんにちは、藤本です。
Github リポジトリへのプッシュをトリガーに CodeDeploy によるデプロイを調べる機会があり、試してみたのでご紹介します。
2年以上前の記事ですが、AWS が公開しているブログの手順で実施できました。
試してみた
設定の流れは以下のようになります。
- Github リポジトリ作成
- CodeDeploy のアプリケーション作成
- Github から CodeDeploy へデプロイする IAMユーザー作成
- Github リポジトリへ CodeDeploy との連携設定
- Github のパーソナルアクセストークン作成
- Github リポジトリの自動デプロイサービス設定
- 動作確認
1. Github リポジトリ作成
Github のリポジトリを作成します。「Github リポジトリ作成」でググると作成方法はたくさん紹介されているのでここは割愛します。適当なテストコードをプッシュします。今回は CodeDeploy のサンプルアプリケーションを利用しています。
$ tree . . ├── LICENSE.txt ├── appspec.yml ├── index.html └── scripts ├── install_dependencies ├── start_server └── stop_server 1 directory, 6 files
2. CodeDeploy のアプリケーション作成
自動で EC2 インスタンスへデプロイするための CodeDeploy アプリケーションを定義します。CodeDeploy のアプリケーション作成は下記エントリをご参照ください。
3. Github から CodeDeploy へデプロイする IAM ユーザー作成
Github リポジトリにプッシュされた時にデプロイするには Github から CodeDeploy へデプロイを実行します。そのため、Github から CodeDeploy のデプロイAPIを実行するための IAM ユーザー(アクセスキー)が必要となります。外部へ預けるアクセスキーなので権限は最小限としたいです。最初に紹介したブログにも記載がありますが、Github リポジトリの CodeDeploy インテグレーション画面でも案内してくれます。
こちらを参考に CodeDeploy のリージョン、AWSアカウントID、アプリケーション名、デプロイメントグループ名を自身の環境に置き換えてください。
4. Github リポジトリへ CodeDeploy との連携設定
Github リポジトリに CodeDeploy と連携するための設定を入力します。Github リポジトリを開いて、上のメニューから [Settings] をクリックします。左メニューから [Integrations & services] を選択します。[Add service] - [AWS CodeDeploy] を選択します。
設定内容は Install Notes に記載されいています。
項目 | 説明 |
---|---|
Application name | 連携する CodeDeploy のアプリケーション名 |
Deployment group | 連携する CodeDeploy アプリケーションのデプロイメントグループ名 |
AWS access key | 発行した IAM ユーザーのアクセスキー |
AWS region | CodeDeploy のリージョン名 |
AWS secret access key | 発行した IAM ユーザーのシークレットキー |
5. Github のパーソナルアクセストークン作成
次の自動デプロイサービスを登録するためのパーソナルアクセストークンを作成します。Github のユーザーから、[Settings] をクリックします。前章はリポジトリの[Settings]で、今回はユーザーの[Settings]です。左メニューから [Personal access tokens] を選択します。[Generate new token] をクリックします。
Token description に任意の名前を入力し、Select scopes(権限)に repo_deployments (デプロイステータスの取得)を割り当てます。
アクセストークンが払い出されます。一度しか表示されないので控えておきます。
6. Github リポジトリの自動デプロイサービス設定
自動デプロイサービスを登録します。4. のリポジトリの連携設定画面に戻ります。[Add service] - [GitHub Auto-Deployment] を選択します。
前章で控えたパーソナルアクセストークンを入力します。
7. 動作確認
それでは Github リポジトリにコードをプッシュして、CodeDeploy でデプロイされることをテストしましょう。
デプロイ前
CodeDeploy の Blue/Green デプロイのサンプルアプリケーションを利用しています。
現在インスタンスへアクセスすると青い画面が表示されます。
ソースコードを変更して、プッシュ
index.html の背景色を緑に変更して、Github リポジトリへプッシュします。
$ git remote -v origin https://s-fujimoto@github.com/s-fujimoto/sampleapp.git (fetch) origin https://s-fujimoto@github.com/s-fujimoto/sampleapp.git (push) $ sed -i '' 's/#0188cc/#00cc3a/g' index.html $ git commit -am "change green" git commit -am "change green" [master 2f11297] change green 1 file changed, 1 insertions(+), 1 deletions(-) $ git push origin master Password for 'https://s-fujimoto@github.com': Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 302 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 2 local objects. To https://github.com/s-fujimoto/sampleapp.git edd9812..2f11297 master -> master
デプロイ
プッシュすると、すぐにデプロイが開始されます。
今回はindex.html を配置して、httpd をストップ/スタートするだけなので1分ほどで完了します。
デプロイ後
インスタンスへアクセスすると緑の画面が表示されます。
Github リポジトリへのプッシュをトリガーに自動でデプロイすることができました。
まとめ
いかがでしたでしょうか?
CodePipeline、CodeBuild を利用することで色々なことができますが、単純に Github へのプッシュをトリガーにアプリケーションデプロイするだけであれば、こちらの設定だけで十分ですね。ビルドやテストをしたい、複数ブランチをインテグレーションしたいなどの要望があれば、CodePipeline、CodeBuildや、その他 CI サービスを活用する必要があります。